#include "threadPool.h"
/* Usage:  */
//子线程函数入口
void* threadFunc(void* arg){
    //先将传递过来的服务端结构体转成实际类型
    threadPool_t* pthreadPool = (threadPool_t*)arg;
    while(1){//让子线程一直运行下去,不可出循环
        int netfd;
        pthread_mutex_lock(&pthreadPool->mutex);
        while(pthreadPool->taskQueue.queueSize == 0 && pthreadPool->exitflag == 0){
            pthread_cond_wait(&pthreadPool->cond,&pthreadPool->mutex);
        }
        if(pthreadPool->exitflag == 1){
            //收到了主进程的退出信号
            printf("我是子进程,我要退出了!\n");
            pthread_mutex_unlock(&pthreadPool->mutex);
            pthread_exit(NULL);
        }
        netfd = pthreadPool->taskQueue.pFront->netfd;//拿到任务队列第一个任务的netfd
        taskDel(&pthreadPool->taskQueue);
        pthread_mutex_unlock(&pthreadPool->mutex);
        printf("我是子线程,我拿到了任务的 netfd = %d\n",netfd);
        //执行任务
        del(netfd);
    }
    return 0;
}
//创建子线程
int makeWorker(threadPool_t* pthreadPool){
    //在线程池中,按照服务端结构中的workNum,创建指定数量的子线程
    for(int i =0 ;i < pthreadPool->tidArr.workerNum; i++){
        //用于存储新线程的线程ID //默认属性 //入口 //入口参数
        pthread_create(&pthreadPool->tidArr.arr[i],NULL,threadFunc,pthreadPool);
    }
    return 0;
}
